package top.leinx.fxnotes.control;

/**
 * @Author : xiaolei
 * @DateTime: 2021/3/26 4:46 下午
 */

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TextControlExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Label labelUsername = new Label("姓名:");
        TextField tfUsername = new TextField();      //创建文本域对象
        // 设置文本域对象的 ActionEvent 监听，在文本域中输入时按 ENTER 键触发
        tfUsername.setOnAction(event -> {
            System.out.println("Press ENTER in tfUsername!");
        });
        HBox hBox1 = new HBox(5.0, labelUsername, tfUsername);
        hBox1.setAlignment(Pos.CENTER_LEFT);

        Label labelPassword = new Label("密码:");
        PasswordField passwordField = new PasswordField(); // 创建密码域对象
        HBox hBox2 = new HBox(5.0, labelPassword, passwordField);
        hBox2.setAlignment(Pos.CENTER_LEFT);

        Label labelMemo = new Label("简介:");
        TextArea taMemo = new TextArea();    // 创建文本区对象
        taMemo.setWrapText(true);  // 一行文本超出控件宽度时，自动换行
        HBox hBox3 = new HBox(5.0, labelMemo, taMemo);
        hBox3.setAlignment(Pos.TOP_LEFT);

        Button button = new Button("输出文本内容");
        button.setDefaultButton(true);
        button.setOnAction(event -> {
            System.out.println("姓名：" + tfUsername.getText());     // getText()方法返回输入的文本
            System.out.println("密码：" + passwordField.getText());
            System.out.println("多行文本：");
            System.out.println(taMemo.getText());

            System.out.println("选择的文本是：" + taMemo.getSelectedText());  // getSelectedText()方法返回被选择的文本
            // getSelection()方法返回的 IndexRange 对象包含对选中文本的属性，
            // IndexRange 对象的 getStart() 和 getEnd() 返回被选择文本在输入文本的起止下标。
            System.out.println("字符从第 " + taMemo.getSelection().getStart() + " 到 " + taMemo.getSelection().getEnd());
            // 锚点由 getAnchor() 方法返回，表示开始进行选择操作的起始位置下标
            // 插入点由 getCaretPosition() 方法返回，表示如果输入字符，输入字符的位置。在选择操作中表示选择结束的位置。
            System.out.println("选择的文本的锚点：" + taMemo.getAnchor());
            System.out.println("选择的文本的插入点：" + taMemo.getCaretPosition());
        });
        HBox hBox4 = new HBox(5.0, button);
        hBox4.setAlignment(Pos.CENTER_RIGHT);

        VBox vBox = new VBox(10.0, hBox1, hBox2, hBox3, hBox4);
        vBox.setStyle("-fx-padding: 10px;");

        primaryStage.setTitle("文本输入控件示例");
        primaryStage.setScene(new Scene(vBox));
        primaryStage.setResizable(false);
        primaryStage.show();
    }
}
